/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.controlador;

import br.com.modelo.Aliquota;
import br.com.modelo.Caixa;
import java.io.Serializable;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import util.JPAUtil;
import util.JSFUtil;

/**
 *
 * @author gilberto.costa
 */
@ManagedBean
@ViewScoped
public class AliquotaControler implements Serializable {

    private Aliquota aliquota;
    private String campoBusca;
    private List<Aliquota> listAliquotas = new ArrayList<Aliquota>();
    private Boolean alterando = false;

    @PostConstruct
    public void init() {
        listAliquotas = Aliquota.retornaAliquotas();
    }

    /**
     * @return the listAliquotas
     */
    public List<Aliquota> getListAliquotas() {
        return listAliquotas;
    }

    /**
     * @param listAliquotas the listAliquotas to set
     */
    public void setListAliquotas(List<Aliquota> listAliquotas) {
        this.listAliquotas = listAliquotas;
    }

    /**
     * @return the aliquota
     */
    public Aliquota getAliquota() {
        return aliquota;
    }

    /**
     * @param aliquota the aliquota to set
     */
    public void setAliquota(Aliquota aliquota) {
        alterando = true;
        this.aliquota = aliquota;
    }

    /**
     * @return the campoBusca
     */
    public String getCampoBusca() {
        return campoBusca;
    }

    /**
     * @param campoBusca the campoBusca to set
     */
    public void setCampoBusca(String campoBusca) {
        this.campoBusca = campoBusca;
    }

    public void inicializaObj() {
        alterando = false;
        aliquota = new Aliquota();
    }

    public void alterar() {
        alterando = false;
    }

    public void salvar() {
        try {
            aliquota = aliquota.salvar();
            listAliquotas = Aliquota.retornaAliquotas();
            JSFUtil.addMessageSucesso("Aliquota salva!!");
            //retornando caixas e salvando nos caixas
            List<Caixa> caixas = CaixaControler.retornaCaixa();
            for (Caixa c : caixas) {
                Connection con = JPAUtil.conectaBanco(c.getIp());
                if (con != null) {
                    aliquota = aliquota.salvarCaixas(c.getIp());
                    JSFUtil.addMessageSucesso("Transferido para caixa(" + c.getNome() + ")");
                }
            }
            org.primefaces.context.RequestContext.getCurrentInstance().execute("dlgAliquota.hide();");
        } catch (Exception e) {
            JSFUtil.addMessageSucesso("Erro ao cadastrar a aliquota!!" + e);
        }
    }

    public void excluir() {
        try {
            aliquota.excluir();
            listAliquotas = Aliquota.retornaAliquotas();
            //retornando caixas e salvando nos caixas
            List<Caixa> caixas = CaixaControler.retornaCaixa();
            for (Caixa c : caixas) {
                Connection con = JPAUtil.conectaBanco(c.getIp());
                if (con != null) {
                    aliquota.excluirCaixas(c.getIp());
                    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Transferido para caixa(" + c.getNome() + ")", "Mensagem"));
                }
            }
            org.primefaces.context.RequestContext.getCurrentInstance().execute("dlgAliquota.hide();");
        } catch (Exception e) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Erro ao excluir aliquota!!" + e, "Mensagem"));
        }
    }

    public void realizaBusca() {
        listAliquotas = Aliquota.retornaBusca(campoBusca);
    }

    public void inicializaBusca() {
        campoBusca = new String();
    }

    public Boolean getAlterando() {
        return alterando;
    }

    public void setAlterando(Boolean alterando) {
        this.alterando = alterando;
    }
}
